2021 伊始:由一次找虐的面试引发的反思
啥水平自己心里还是清楚的,连基础算法和 c++
都没完整过一遍,活生生一个面向百度 CV 编程的“大神”。
1 这半个月的面试
12月底提了离职,简历挂在BOSS上,时不时接几个面试(年后再去投那些相中的小公司)。这一个月下来,虽然也拿了几个 offer
,但都是些小公司,面试流程也水得很。有点规模的公司,基本上初面就 pass
了,谁让我连基础算法、数据结构、网络知识和操作系统都没系统学过呢。不断试水下来,信心倒是越来越薄,转行真难。
2 今天的面试
今天我更离谱,竟然去面了个区块链开发的岗。人家招聘需求上写得明明白白要 Go
开发,我心一横直接发了简历。第二天 HR 打电话问我晚上能不能视频面试,想了想也没多管,直接答应了。回到家一看,好家伙,人家做区块链的,不要 Qt/c++ 开发,也不做桌面软件。
凉了,面试还有上机测试:用 Go 实现有序序列的查找。我压根不知道 Go 是个啥,书架上的《数据结构与算法》也只看了开头,心里大概知道如何优化,但怕说出来更丢人,最后硬着头皮说遍历查找就好。感觉面试官还在尽力找我做过的东西聊聊,但算法、网络这些话题一深,我就 GG 了。
3 反思自学的方法
当时转行 c++
时,给自己定了两条路:
- 跟着系统学习,有计划有步骤;
- 跟着项目走,遇到啥学啥,面向百度编程。
公司正好缺个软件界面/交互开发,白天干本职,晚上和周末突击学习,硬是挤进了软件开发,选择了第二条路。毫无基础(之前只玩过 Arduino 的比赛,用的 c 而且程序简单)的我,靠着百度自学,摸索 Qt/c++ 竟然还真能通关。半年时间,独立实现了机械手上位机控制,做了跟触摸屏和 PLC 的通讯(其实就是加个简单的 TCP 通讯),甚至还做了个“分布式”系统(几台电脑共享文件夹传结果)。第二年刚开始,公司第一个项目就把界面和交互交给我做(自己设计 UI,自己切图),第二个项目还直接让我负责架构设计(估计我走后其他人骂我代码乱成啥样)。
至于编程思维和规范,当时根本没概念。搞了一年才知道代码规范这种东西的存在,还是因为在群里问问题时,有人吐槽我代码太乱。原来还要写得美观、命名清晰呀……
“设计模式”和“架构”这些东西我是准备跳槽时才听说的,那时候才知道有专门的架构模式,回头看看自己原来写的代码……
跳槽后依旧是“项目驱动,面向百度编程”。学了一堆调用 API 的技能,尽管还菜得很,但按时交任务,自己竟然一度还挺满意。工作两年后才知道单元测试、系统测试、集成测试的存在。连纯虚函数、函数指针是啥都搞不清楚,但别人这么写我就照抄就是了。
4 最近这次离职
稀里糊涂地在第二家公司独立开发了好几个软件,公司甚至觉得我水平够可以了,架构重组后还让我做开发组 Leader。虽然不涨薪,工作量翻了不止一倍,刚上任时倒是信心满满。我们有不到20个软件,Qt 开发 4 人,算法 10 多人。我还雄心勃勃地想规范开发流程、统一软件架构、帮算法组封装接口、模块化开发现有软件、搞内部 wiki 和培训、开发公司共享库。
理想丰满,现实骨感。升职 3 个月,一样都没做成。自己能力不足是一方面,公司资源紧张也是一大原因,所有精力都投在新软件开发上。
公司发展算稳健,3 年内大概率会上市。老板很有雄心,公司从成立开始就是奔着上市去的,各种目标定得都很清晰,有一堆人排着队想投钱。
离职原因挺多的:提升个人代码水平、买婚房、学历提升、未来计划、结婚、生子、是否在杭州安家、几个月后的工作机会、薪资,年终奖还要认购股份,做了一年没有成就感,成果都是 DEMO
,等等。
5 反思
当时选了第二种学习方法,快速入行,但问题也暴露无遗:基础薄弱,常见算法没了解,编程思维是阶段性自我感觉良好,然后看到别人代码立马泄气。
当代码量累积到一定程度,才深刻意识到“基础”的分量。
这次决定老老实实找个学习路线,重新学一遍 c++
。网上搜了好多路线,但 99% 是广告,真想找个培训班,假装报名套一套适合自己的学习路线。看完花里胡哨的路线和资源,还是决定按编程四大件自己学吧。
6 重学C++路线
白天工作+通勤时间看书,晚上手撸代码,每天工作和学习相结合。希望这次结束后能自信地说一句“我是个中级 C++ 开发工程师”了。
花了 300 买了几本书,计划半年刷完。
计划用 6 个月,沿着编程四大件来完成
c++
学习(平均每天 3 小时)
晚上花时间细看和上机实验:
- 语法知识(2 个月)
C++ Primer Plus - 数据结构和算法(2 个月)
大话数据结构
数据结构、算法与应用 C++ 语言描述 - 设计模式(1 个月)
大话设计模式 - 计算机网络(1 个月)
TCP/IP 协议详解 第一卷
工作中/闲时翻看,不专门深入研究:
- 计算机操作系统
鸟叔的 Linux 私房菜 - 其他推荐阅读
C++ Primer
Effective C++
More Effective C++
STL 源码剖析
C++ 沉思录
2024.11.12 今天回头一看当时的计划,才发现自己一天都没坚持下来。